#ifndef HISTORYMESSAGEWIDGET_H
#define HISTORYMESSAGEWIDGET_H

#include <QDialog>
#include <QWidget>
#include <QGridLayout>
#include <QRadioButton>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include "model/data.h"

using model::Message;

//////////////////////////
/// 表示历史消息的一个元素
/////////////////////////

class HistoryItem: public QWidget
{
    Q_OBJECT
public:
    HistoryItem();

    static HistoryItem* makeHistoryItem(const Message& message);
};

//////////////////////////
/// 表示历史消息的窗口
/////////////////////////
class HistoryMessageWidget : public QDialog
{
    Q_OBJECT
public:
    HistoryMessageWidget(QWidget* parent);

    //在窗口中添加消息
    void addHistoryMessage(const Message& message);

    //清空窗口历史消息
    void clear();

    void clickSearchBtn();
    void clickSearchBtnDone();
private:
    QWidget* container;
    QLineEdit* searchEdit;
    QRadioButton* keyRadioBtn;
    QRadioButton* timeRadioBtn;
    QDateTimeEdit* begTimeEdit;
    QDateTimeEdit* endTimeEdit;
    void initScrollArea(QGridLayout* layout);
};


///////////////////////////////////
/// 展示图片历史消息
/// /////////////////////


class ImageButton : public QPushButton
{

public:
    ImageButton(const QString& fileId, const QByteArray& content);
    void updateUI(const QString& fileId, const QByteArray& content);
private:
    //此处设定,和前面的消息列表是一致的
    //希望返回的响应数据里,针对图片/文件/语音消息只是返回fileId
    //后续再通过二次发起请求的方式,来获取到图片的真实内容
    QString fileId;


};


///////////////////////////////////
/// 展示文件历史消息
/// //////////////////////////////

class  FileLabel : public QLabel {
public:
    FileLabel(const QString& fileId, const QByteArray& content, const QString& fileName);
    void getContentDone(const QString& fileId, const QByteArray& fileContent);
    //鼠标点击操作
    void mousePressEvent(QMouseEvent* event);

private:
    QString fileId;
    QByteArray content;
    QString fileName;
    bool loadDone = false;
};

///////////////////////////////////
/// 展示语音历史消息
/// //////////////////////////////

class SpeechLabel : public QLabel {
public:
    SpeechLabel(const QString& fileId);
    void getContentDone(const QString& fileId, const QByteArray& content);

    //通过这个函数来处理鼠标点击
    void mousePressEvent(QMouseEvent* event);


private:
    QString fileId;
    QByteArray content;
    bool loadDone = false;
};

#endif // HISTORYMESSAGEWIDGET_H
